/**
 * 会话隔离工具
 * 确保不同标签页之间的会话状态互不干扰
 */

// 为当前会话生成一个唯一标识符
const generateSessionId = () => {
	return 'session_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)
}

// 获取或创建会话ID
const getSessionId = () => {
	let sessionId = sessionStorage.getItem('session_id')
	if (!sessionId) {
		sessionId = generateSessionId()
		sessionStorage.setItem('session_id', sessionId)
	}
	return sessionId
}

/**
 * 初始化会话
 * 确保每个标签页都有自己的会话ID
 */
export function initSession() {
	// 确保会话ID存在
	getSessionId()
}

/**
 * 保存会话数据
 * @param {string} key - 键名
 * @param {any} value - 要存储的值
 */
export function setSessionData(key, value) {
	const sessionId = getSessionId()
	const sessionKey = `${sessionId}_${key}`
	sessionStorage.setItem(sessionKey, JSON.stringify(value))
}

/**
 * 获取会话数据
 * @param {string} key - 键名
 * @returns {any} - 存储的值，如果不存在则返回null
 */
export function getSessionData(key) {
	const sessionId = getSessionId()
	const sessionKey = `${sessionId}_${key}`
	const value = sessionStorage.getItem(sessionKey)
	return value ? JSON.parse(value) : null
}

/**
 * 移除会话数据
 * @param {string} key - 键名
 */
export function removeSessionData(key) {
	const sessionId = getSessionId()
	const sessionKey = `${sessionId}_${key}`
	sessionStorage.removeItem(sessionKey)
}

/**
 * 清除所有会话数据
 */
export function clearSessionData() {
	const sessionId = getSessionId()
	const keysToRemove = []

	// 查找所有属于当前会话的项
	for (let i = 0; i < sessionStorage.length; i++) {
		const key = sessionStorage.key(i)
		if (key && key.startsWith(`${sessionId}_`)) {
			keysToRemove.push(key)
		}
	}

	// 删除找到的项
	keysToRemove.forEach(key => {
		sessionStorage.removeItem(key)
	})

	// 保留会话ID
	sessionStorage.setItem('session_id', sessionId)
}
